K.

requires("K.util.IdProvider").

includes("K.manager.ThemeManager").
includes("K.dom.Element").

provides("K.ui.Component").

run(function(I) {
    var idProvider = I.IdProvider(),
    
        Component = K.kin(function(o, shared) {
            var element = I.Element(document.createElement("DIV")),
                id = idProvider.next();
            
            if (!shared) {
                shared = {};
            }
            
            K.merge(shared, {
                cssClass : shared.component.replace(/\./g, "-")
            });
            
            element.addClass(shared.cssClass);
            
            K.merge(shared, {
                theme : I.ThemeManager.getDefaultManager().getDefaultTheme() 
            });
            
            K.merge(o, {
                id : function() {
                    return id;
                },
                
                element : function() {
                    return element;
                },
                
                render : function() {
                    throw shared.component + " | [render] Not implemented";
                }
            });        
        });
    
    return Component;
});